<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>基本使用</title>
    <script type="text/javascript" src="../vue.js"></script>
</head>

<!--
    Vue中使用组件的三大步骤：
        一.定义组件（创建组件）
        二.注册组件
        三.使用组件（写组件标签）

     一.如何定义一个组件？
        使用Vue.extend(options)创建，其中options和new Vue(options)时传入的options几乎一模一样，但也有点区别
        区别如下：
            1.el不要写，为什么？ ———— 最终所有的组件都要经过一个vm的管理，由vm中的el决定服务哪个容器。
            2.data必须写成函数，为什么？ ———— 避免组件被复用时，数据存在引用过关系。
        备注：使用template可以配置组件结构

     二.如何注册组件？
        1.局部注册： 靠new Vue的时候传入components选项
        2.全局注册： 靠Vue.component('组件名'，组件)

     三.编写组件标签：
        <school></school>

-->


<body>
<!-- 准备好 一个容器-->
<div id="root">
    <h1>{{msg}}</h1>
    <hr>
<!--    第三步：编写组件标签-->
        <school></school>
    <hr>
    <!--    第三步：编写组件标签-->
        <student></student>
        <student></student>
</div>

<div id="root2">
    <hello></hello>
</div>

</body>


<script type="text/javascript">

    Vue.config.productionTip = false //设置为 false 以阻止 vue 在启动时生成生产提示。
    //第一步：创建组件

    //创建school组件
    const school = Vue.extend({
        template:'<div>    <h2>学校名称：{{schoolName}}</h2>\n' +
            '    <h2>学校地址：{{address}}</h2></div>',
        //一定不能写el配置项，因为最终所有的组件都要被一个vm管理，由vm进行决定服务对象
        data(){
            return {
                schoolName: 'itshumm',
                address: 'hf'
            }
        }
    })

    //创建student组件
    const student = Vue.extend({
        template:'<div>\n' +
            '    <h2>学生姓名：{{studentName}}</h2>\n' +
            '    <h2>学生年龄：{{age}}</h2>' +
            '<button @click="tip">点我提示学生姓名</button></div>',
        data(){
            return{
                studentName:'shumm',
                age:18
            }
        },
        methods:{
            tip(){
                alert(this.studentName)
            }
        }
    })

    //创建hello组件
    const hello = Vue.extend({
        template:'<div>' +
            '<h2> 你好{{name}}</h2>' +
            '</div>',
        data(){
            return{
                name:'张三'
            }
        }
    })

    //第二步：注册全局组件
    Vue.component('hello',hello)


    //创建Vue实例级vm
    new Vue({
        el: '#root',
        data:{
          msg:'你好'
        },
        //第二步：注册组件
        components:{
            school,
            student
        }
    })

    new Vue({
        el:'#root2'
    })

</script>

</html>
